Intro to Middle Neighborhoods

Justin Elszasz, Mayor’s Office of Innovation

Friday, February 22, 2019

Our Middle Neighborhoods (based on HMT)

Our Middle Neighborhoods (75% - 125% of city median income)

mid.hoods.med.inc <- subset(hmt, med.inc.tier == "middle")

leaflet() %>% 
  setView(lng = -76.6, lat = 39.3, zoom = 11) %>%
  addProviderTiles(providers$Stamen.TonerLite) %>%
  addPolygons(data = mid.hoods.med.inc, 
              color = iteam.colors[3],
              weight = 1,
              #fillColor = ~pal(MVA17HrdCd),
              fillColor = iteam.colors[3],
              fillOpacity = .6,
              #opacity = 0,
              label = ~as.character(mid.hoods.med.inc$MVA17HrdCd)
              ) %>%
  #addGeoJSON(hoods, weight = 1, color = "black", fillOpacity = 0)
  addPolygons(data = hoods, 
              weight = 2, 
              color = "black",
              opacity = 0.5,
              fillOpacity = 0, 
              label = ~hoods$label) %>%
    addLegend(data = hmt,
            position = "bottomright",
            colors =  c(iteam.colors[3]),
            labels = "Middle (based on 25% - 75% City Median Income)",
            title = "")

Comparing the definitions

hmt.summary <- hmt@data %>% 
  mutate(hmt.tier = ifelse(hmt.tier %in% c("lower middle", "upper middle"), "middle", hmt.tier)) %>%
  group_by(hmt.tier) %>%
  summarise(n.block.groups.hmt = n(),
            pop.hmt = sum(Population.2016)) %>%
  mutate(pct.block.groups.hmt = percent(n.block.groups.hmt / sum(n.block.groups.hmt)),
         pct.pop.hmt = percent(pop.hmt / sum(pop.hmt)))

med.inc.summmary <- hmt@data %>% 
  group_by(med.inc.tier) %>%
  summarise(n.block.groups.med.inc = n(),
            pop.med.inc = sum(Population.2016)) %>%
  mutate(pct.block.groups.med.inc = percent(n.block.groups.med.inc / sum(n.block.groups.med.inc)),
         pct.pop.med.inc = percent(pop.med.inc / sum(pop.med.inc)))

left_join(hmt.summary, med.inc.summmary, by = c("hmt.tier" = "med.inc.tier")) %>%
  rename(tier = "hmt.tier") %>%
  filter(tier != "other") %>%
  transmute(Tier = tier,
            `Population (HMT)` = pop.hmt,
            `% City Pop (HMT)` = pct.pop.hmt,
            `Population (Median Income)` = pop.med.inc,
            `% City Pop (Median Income)` = pct.pop.med.inc) %>%
  kable() %>%
  column_spec(c(1,2,3,4,5), width = "10em")
Tier Population (HMT) % City Pop (HMT) Population (Median Income) % City Pop (Median Income)
distressed 93406 14.8% 226724 35.9%
healthy 158813 25.1% 133709 21.1%
middle 345964 54.7% 237750 37.6%

Income levels in our middle neighborhoods are well below area’s

Middle neighborhoods have more older homeowners

hmt.tier Mean % Homeowners 65+ Median % Homeowners 65+
distressed 14.0% 12.6%
healthy 11.9% 9.87%
lower middle 17.2% 15.2%
upper middle 16.8% 15.0%

Total Service Requests per 1,000 Residents

HMT Tier Population SR Count SR’s per 1,000 Residents
distressed 93406 74156 794
lower middle 183631 97962 533
healthy 158813 77773 490
upper middle 162333 70744 436
other 34184 10230 299

Top Service Request Types by HMT Tier

rank healthy upper middle lower middle distressed other
1 TRS-Parking Complaint SW-Bulk Scheduled SW-Bulk Scheduled HCD-Sanitation Property ECC-Vehicle Look Up
2 SW-Bulk Scheduled HCD-Sanitation Property HCD-Sanitation Property SW-HGW TRS-Parking Complaint
3 HCD-Sanitation Property TRS-Parking Complaint SW-Dirty Alley SW-Dirty Alley BGE-StLight(s) Out